home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 June
/
EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso
/
earcd
/
utilsys
/
rss14gmd.lha
/
RSys_1.4gmd
/
C
/
Displays.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-04
|
14KB
|
627 lines
/*
***************************************************************************
*
* Datei:
* RSysDisplays.c
*
* Inhalt:
*
* --- Globale Routinen ---
*
* int DisplayDiskInfo ( char *filename , int with_tree );
* int DisplayFileInfo ( char *filename );
* int DisplayFontInfo ( RSYS_Objid *obj );
* int DisplayLibraryInfo ( RSYS_Objid *obj );
* int DisplayLockInfo ( RSYS_Objid *obj );
* int DisplayPortInfo ( RSYS_Objid *obj );
* int DisplayScreenInfo ( RSYS_Objid *obj );
* int DisplayTaskInfo ( RSYS_Objid *obj );
* int DisplayWindowInfo ( RSYS_Objid *obj );
* void DisplayDirectoryInfo ( char *filename );
* void DisplayResourceInfo ( RSYS_Objid *obj );
* void DisplaySoftDevInfo ( RSYS_Objid *obj );
*
* --- Lokale Routinen ---
*
* static char *makelibflags ( LIBRARY *lib , char *flags );
* static void savecpyid ( char *IDStr , LIBRARY *lib );
*
* Bemerkungen:
* Funktionen zur Anzeige weiterer Informationen zu ausgewählten
* Objekten.
*
* Erstellungsdatum:
* 07-Jul-93 Rolf Böhme
*
* Änderungen:
* 07-Jul-93 Rolf Böhme Erstellung
*
*
* NOTE: all funcs calling MyEasyRequest() rewritten to sprintf
* buffer locally for ease of examination.
*
*
***************************************************************************
*/
#include "RSys.h"
#include "protos.h"
/*
* DisplayDiskInfo() zeigt eine Info über ein Volume an.
* Auf Wunsch kann die Verzeichnisstruktur angezeigt
* werden
*/
int
DisplayDiskInfo (char *filename, int with_tree)
{
int sel;
long free = 0L, used = 0L, percentused = 0L;
char state[50], type[60];
char xxxx[1000];
DPOS;
FreeBytes (filename, &free, &used, &percentused, state, type);
sprintf (xxxx,
(UBYTE *) "Name : %-20.20s\n"
"Size : %7ld KBytes\n"
"Free : %7ld KBytes\n"
"Used : %7ld KBytes\n"
"%%%% used : %3ld%%%%\n"
"State : %s\n"
"Type : %s",
filename,
free + used,
free,
used,
percentused,
state,
type);
sel = MyEasyRequest (SysWnd, (UBYTE *) NAME " - Volume/Device Info",
(UBYTE *) ((with_tree) ? "Tree|Continue" : "Continue"),
xxxx);
return sel;
}
/*
* DisplayFileInfo() zeigt Infos über eine Datei an.
* Handelt es sich um ein Executable, kann eine Hunk-Liste
* erzeugt werden lassen
*/
int
DisplayFileInfo (char *filename)
{
char path[MAXFULLNAME], *help, file[MAXFULLNAME];
int ftype = filetype (filename);
int sel;
char xxxx[1000];
DPOS;
strncpy (path, filename, MAXFULLNAME);
help = (char *) PathPart ((UBYTE *) path);
*help = STRINGEND;
strncpy (file, (char *) FilePart ((UBYTE *) filename), MAXFULLNAME);
sprintf (xxxx,
(UBYTE *) "Filename : %-20.20s\n"
"Path : %s\n"
"Size : %ld Bytes\n"
"Type : %s",
file,
path,
SizeOfFile (filename),
mess[ftype]);
sel = MyEasyRequest (NULL, (UBYTE *) NAME " - File Info",
(UBYTE *) ((ftype == TYPE_EXECUTABLE) ?
"Hunk list|Continue" : "Continue"),
xxxx);
if (ftype != TYPE_EXECUTABLE)
return TRUE;
return sel;
}
/*
* DisplayDirectoryInfo() zeigt Infos über ein Verzeichnis
* an
*/
void
DisplayDirectoryInfo (char *filename)
{
int count, Dirs = 0;
long Size = 0L;
char path[MAXFULLNAME], *help;
BPTR lock;
char xxxx[1000];
DPOS;
strncpy (path, filename, MAXFULLNAME);
help = (char *) PathPart ((UBYTE *) path);
*help = STRINGEND;
if (lock = Lock ((UBYTE *) path, MODE_OLDFILE))
{
count = SizeOfDir (lock, &Size, &Dirs);
UnLock (lock);
}
else
{
count = Size = Dirs = 0;
}
sprintf (xxxx,
(UBYTE *) "Path : %s\n"
"# Files : %ld\n"
"# Sub-Dirs : %ld\n"
"Total : %ld Bytes",
path, count, Dirs, Size);
MyEasyRequest (NULL,
(UBYTE *) NAME " - Directory Info", (UBYTE *) "Continue",
xxxx);
return;
}
/*
* DisplayTaskInfo() zeigt Infos über einen Task an. Auf
* Wunsch kann der Task gekillt, ein Signal gesendet oder
* die Priorität geändert werden
*/
int
DisplayTaskInfo (RSYS_Objid * obj)
{
TASK *task = (TASK *) obj->address, display_task;
char *status[] =
{
"Invalid", "Adding ", "Running", "Ready ", "Waiting", "Except", "Remove"
};
int sel = 7, wins = 0, scrs = 0, ports = 0;
char xxxx[1000];
DPOS;
Disable ();
CopyMem (task, &display_task, sizeof (TASK));
Enable ();
CountAssocObjects (task, &wins, &scrs, &ports);
sprintf (xxxx,
"Name : %-20.20s (%s) Prio: %-4ld\n"
"Address : 0x%08X Flags : 0x%08X\n"
"State : %-8s IDNest : %-8ld\n"
"TDNest : %-8ld SigAlloc : 0x%08X\n"
"SigWait : 0x%08X SigRecvd : 0x%08X\n"
"SigExcept : 0x%08X Stack : %-5ld\n\n"
"Associated Objects\n"
"Ports : %4ld - Windows : %4ld\n"
"Screens : %4ld",
obj->fullname,
(display_task.tc_Node.ln_Type == NT_TASK) ? "Task" : "Process",
display_task.tc_Node.ln_Pri,
task,
display_task.tc_Flags,
status[display_task.tc_State],
display_task.tc_IDNestCnt,
display_task.tc_TDNestCnt,
display_task.tc_SigAlloc,
display_task.tc_SigWait,
display_task.tc_SigRecvd,
display_task.tc_SigExcept,
((ULONG) display_task.tc_SPUpper - (ULONG) display_task.tc_SPLower),
ports,
wins,
scrs);
sel = MyEasyRequest (SysWnd, get_vers (" - Task Control"),
"Kill!|^C|^D|^E|^F|Prio|Continue",
xxxx);
return sel;
}
/*
* savecpyid() kopiert den ID-String einer Library in ein
* Zeichenfeld. Am Ende des Strings erscheinen häufig zwei
* Sonderzeichen, die hier entfernt werden
*
*
* hacked by GMD
*
*/
static void
savecpyid (char *IDStr, LIBRARY * lib)
{
char *id = (char *) lib->lib_IdString;
int j;
for (j = 0; j < 40; ++j)
{
IDStr[j] = '\0';
}
if (id && *id)
{
for (j = 0; (j < 40) && (*id); ++j) /* remove CR/LF */
{
if ((*id == '\n') || (*id == '\r'))
IDStr[j] = '\0';
else
IDStr[j] = *id++;
}
}
else
strcpy (IDStr, field[NO_LIB_ID]);
return;
}
/*
* makelibflags() erzeugt entsprechend der Library-Flags
* einen "lesbaren" String
*/
static char *
makelibflags (LIBRARY * lib, char *flags)
{
if (lib->lib_Flags == 0)
strcpy (flags, field[NO_FLAGS]);
else
sprintf (flags, "%10s %10s %10s %10s",
(lib->lib_Flags & LIBF_SUMUSED) ? "ResetByErr" : field[BLANK_FIELD],
(lib->lib_Flags & LIBF_SUMMING) ? "CheckSum" : field[BLANK_FIELD],
(lib->lib_Flags & LIBF_CHANGED) ? "Changed" : field[BLANK_FIELD],
(lib->lib_Flags & LIBF_DELEXP) ? "DelExpunge" : field[BLANK_FIELD]);
return flags;
}
/*
* DisplayLibraryInfo() zeigt alle Infos über eine Library
* an
*/
int
DisplayLibraryInfo (RSYS_Objid * obj)
{
int sel;
LIBRARY *lib = (LIBRARY *) obj->address;
char IDStr[100];
char xflags[100];
char xxx[1000];
makelibflags (lib, xflags);
DPOS;
savecpyid (IDStr, lib);
sprintf (xxx,
"Type : Library\n"
"Name : %s\n"
"ID-String : %-30.30s\n"
"Address : 0x%08X\n"
"Flags : %s\n"
"Jump-Table-Size: %4ld Bytes Data-Size : %ld Bytes\n"
"CheckSum : 0x%08X",
obj->fullname,
IDStr,
obj->address,
xflags,
lib->lib_NegSize,
lib->lib_PosSize,
lib->lib_Sum
);
sel = MyEasyRequest (SysWnd, get_vers (" - Library Control"),
"Remove Library|Continue",
xxx
);
return sel;
}
/*
* DisplaySoftDevInfo() zeigt alle Infos über ein
* *.device an
*/
void
DisplaySoftDevInfo (RSYS_Objid * obj)
{
LIBRARY *lib = (LIBRARY *) obj->address;
char IDStr[100];
char xflags[100];
char xxxx[1000];
makelibflags (lib, xflags);
DPOS;
savecpyid (IDStr, lib);
sprintf (xxxx,
"Type : Software Device\n"
"Name : %s\n"
"ID-String : %-30.30s\n"
"Address : 0x%08X\n"
"Flags : %s\n"
"Jump-Table-Size: %4ld Bytes Data-Size : %ld Bytes\n"
"CheckSum : 0x%08X",
obj->fullname,
IDStr,
obj->address,
xflags,
lib->lib_NegSize,
lib->lib_PosSize,
lib->lib_Sum);
MyEasyRequest (SysWnd,
get_vers (" - Software Device Info"),
"Continue",
xxxx);
return;
}
/*
* DisplayResourceInfo() zeigt alle Infos über eine .resource
* an
*/
void
DisplayResourceInfo (RSYS_Objid * obj)
{
LIBRARY *lib = (LIBRARY *) obj->address;
char xflags[100];
char xxxx[1000];
makelibflags (lib, xflags);
DPOS;
sprintf (xxxx,
(UBYTE *) "Type : Resource\n"
"Name : %s\n"
"Address : 0x%08X\n"
"Flags : %s\n"
"Jump-Table-Size: %4ld Bytes Data-Size : %ld Bytes\n"
"CheckSum : 0x%08X",
obj->fullname,
obj->address,
xflags,
lib->lib_NegSize,
lib->lib_PosSize,
lib->lib_Sum);
MyEasyRequest (SysWnd,
get_vers (" - ResourceInfo"),
(UBYTE *) "Continue",
xxxx);
return;
}
/*
* DisplayPortInfo() zeigt Infos über einen Port an
*/
int
DisplayPortInfo (RSYS_Objid * obj)
{
int sel;
MSGPORT *port;
char sigtask[MAXFULLNAME];
TASK *task;
char *yflags[] =
{
"Signal", "SoftInt", "Ignore"
};
char xxxx[1000];
DPOS;
Disable ();
port = (MSGPORT *) obj->address;
if (port->mp_SigTask)
{
task = (TASK *) (port->mp_SigTask);
savestrcpy (sigtask, &task->tc_Node, MAXFULLNAME, NT_TASK);
}
else
strcpy (sigtask, field[NO_TASK]);
Enable ();
sprintf (xxxx,
(UBYTE *) "Type : %s\n"
"Address : 0x%08X\n"
"Name : %-20.20s\n"
"Signal-Task : %-20.20s\n"
"Flags : %s",
"Port",
obj->address,
obj->fullname,
sigtask,
yflags[port->mp_Flags]);
sel = MyEasyRequest (SysWnd, get_vers (" - Port Control"),
(UBYTE *) "Remove Port|Continue",
xxxx);
return sel;
}
/*
* DisplayFontInfo() zeigt alle Infos über einen Font an.
* Dieser kann dann wahlweise entfernt oder angezeigt
* werden
*/
int
DisplayFontInfo (RSYS_Objid * obj)
{
int sel;
char xxxx[1000];
DPOS;
sprintf (xxxx,
(UBYTE *) "Type : %s\n"
"Address : 0x%08X\n"
"Name : %s",
"Font",
obj->address,
obj->fullname);
sel = MyEasyRequest (SysWnd, get_vers (" - Font Control"),
(UBYTE *) "Remove Font|Show Font|Continue",
xxxx);
return sel;
}
/*
* DisplayWindowInfo() zeigt Infos über ein Fenster an
*/
int
DisplayWindowInfo (RSYS_Objid * obj)
{
int sel;
WINDOW disp_win;
ULONG lock;
char xxxx[1000];
DPOS;
lock = LockIBase (NULL);
CopyMem ((WINDOW *) (obj->address), &disp_win, sizeof (WINDOW));
UnlockIBase (lock);
sprintf (xxxx,
(UBYTE *)
"Type : Window Address : 0x%08X\n"
"Name : %-30.30s\n"
"Next : 0x%08X\n"
"LeftEdge : %-4ld TopEdge : %-4ld\n"
"Width : %-4ld Height : %-4ld\n"
"MinWidth : %-4ld MinHeight: %-4ld\n"
"MaxWidth : %-4ld MaxHeight: %-4ld\n"
"Flags : 0x%08X Menu: %s\n"
"Requester: %3s ReqCount: %ld DMReq: %s\n"
"IDCMP : 0x%08X Detail: %-2ld Block: %2ld",
obj->address, obj->fullname,
disp_win.NextWindow,
disp_win.LeftEdge, disp_win.TopEdge,
disp_win.Width, disp_win.Height,
disp_win.MinWidth, disp_win.MinHeight,
disp_win.MaxWidth, disp_win.MaxHeight,
disp_win.Flags, (disp_win.MenuStrip ? "Yes" : "No"),
(disp_win.FirstRequest ? "Yes" : "No"), disp_win.ReqCount,
(disp_win.DMRequest ? "Yes" : "No"), disp_win.IDCMPFlags,
disp_win.DetailPen, disp_win.BlockPen);
sel = MyEasyRequest (SysWnd,
get_vers (" - Window Control"),
(UBYTE *) "Close Window|Continue",
xxxx);
return sel;
}
/*
* DisplayScreenInfo() zeigt Infos über ein Screen an
*/
int
DisplayScreenInfo (RSYS_Objid * obj)
{
int sel;
SCREEN disp_scr;
ULONG lock;
char xxxx[1000];
DPOS;
lock = LockIBase (NULL);
CopyMem ((SCREEN *) (obj->address), &disp_scr, sizeof (SCREEN));
UnlockIBase (lock);
sprintf (xxxx,
(UBYTE *) "Type : Screen Address : 0x%08X\n"
"Name : %.20s\n"
"Next : 0x%08X\n"
"LeftEdge : %-4ld TopEdge : %-4ld\n"
"Width : %-4ld Height : %-4ld\n"
"BarHeight: %-4ld BarVBord : %-4ld\n"
"BarHBord : %-4ld MenuVBord: %-4ld\n"
"MenuHBord: %-4ld WBorTop : %-4ld\n"
"WBorLeft : %-4ld WBorRight: %-4ld\n"
"WBorBott : %-4ld DetailPen: %-4ld\n"
"BlockPen : %-4ld FlashCol : %-4ld\n"
"Flags : 0x%08X",
obj->address, obj->fullname,
disp_scr.NextScreen,
disp_scr.LeftEdge, disp_scr.TopEdge,
disp_scr.Width, disp_scr.Height,
disp_scr.BarHeight, disp_scr.BarVBorder,
disp_scr.BarHBorder, disp_scr.MenuVBorder,
disp_scr.MenuHBorder, disp_scr.WBorTop,
disp_scr.WBorLeft, disp_scr.WBorRight,
disp_scr.WBorBottom, disp_scr.DetailPen,
disp_scr.BlockPen, disp_scr.SaveColor0,
disp_scr.Flags);
sel = MyEasyRequest (SysWnd, get_vers (" - Screen Control"),
(UBYTE *) "Close Screen|Continue",
xxxx);
return sel;
}
int
DisplayLockInfo (RSYS_Objid * obj)
{
int sel;
int ftype = filetype (obj->fullname);
char xxxx[1000];
sprintf (xxxx,
(UBYTE *) "Type : Lock\n"
"File : %s\n"
"Address : 0x%08X\n"
"File type : %s",
obj->fullname,
obj->address,
mess[ftype]);
sel = MyEasyRequest (SysWnd, get_vers (" - FileLock Control"),
(UBYTE *) (ftype ? "Unlock|Continue" : "Continue"),
xxxx);
return (ftype ? sel : 0);
}